﻿<?php
////////////////////////////////////////////////////////////////////////////
//                                                                        //
// NOTICE OF COPYRIGHT                                                    //
//                                                                        //
// Dean`s Office for Moodle                                               //
// Электронный деканат                                                    //
// <http://deansoffice.ru/>                                               //
//                                                                        //
// Copyright (C) 2008-2999  Alex Djachenko (Алексей Дьяченко)             //
// alex-pub@my-site.ru                                                    //
// This program is free software: you can redistribute it and/or modify   //
// it under the terms of the GNU General Public License as published by   //
// the Free Software Foundation, either version 3 of the Licensen.        //
//                                                                        //
// This program is distributed in the hope that it will be useful,        //
// but WITHOUT ANY WARRANTY; without even the implied warranty of         //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          //
// GNU General Public License for more details.                           //
//                                                                        //
// You should have received a copy of the GNU General Public License      //
// along with this program.  If not, see <http://www.gnu.org/licenses/>.  //
//                                                                        //
////////////////////////////////////////////////////////////////////////////
// Обработчик действий для гостевой книги
// Поддерживает создание, удаление и изменение 
// как сообщений, так и комментариев с 
// проверкой доступа.
///////////////////////////////////////

// Подключаем библиотеки
require_once('lib.php');
require_once('form.php');

// Получаем task
$task = optional_param('task', '', PARAM_TEXT);
// Добавляем task в addvars для передачи на страницу при ошибках
$addvars = array('task' => $task);
// Обработка задачи
switch ($task) 
{
    case 'add' :
    // Создание сообщения
    
        // Если доступ запрещен, переводим на главную с ошибкой
        if (! $DOF->storage('posts')->is_access('create'))
            $DOF->print_error('accesserror_create_post', 
                $DOF->url_im('pguestbook','/index.php'), null, 'im', 'pguestbook');
        // Создаем объект формы
        $customdata = new stdClass;
        $customdata->dof = $DOF;
		$customdata->id = optional_param('id', 0, PARAM_INT);
        $postid = optional_param('postid', 0, PARAM_INT);
		$customdata->postid = $postid;
        if ($postid) 
        {
            $customdata->task = 'addcomment';
        } else 
        {
            $customdata->task = 'addpost';
        }
        $form = new dof_im_pguestbook_add_form(
            $DOF->url_im('pguestbook','/process_form.php',$addvars),$customdata);
        // Обработчик формы
        $form->process();
        // Заносим данные в форму
        $form->set_data();
        // Выводим форму на станицу
        $DOF->modlib('nvg')->print_header(NVG_MODE_PORTAL);
        $form->display();
        break;
    case 'editpost' :
    // Редактирование сообщения
        
        // Получаем id сообщения
        $id = optional_param('id', 0, PARAM_INT);
        $addvars['id'] = $id;
        // Если id < 1 переводим на главную с ошибкой
        if ( $id < 1 )
            $DOF->print_error('error_edit_comment', $DOF->url_im(
                'pguestbook','/index.php'), null, 'im', 'pguestbook');
        // Если доступ запрещен, переводим на главную с ошибкой
        if (! $DOF->storage('posts')->is_access('edit',$id))
            $DOF->print_error('accesserror_edit_post', $DOF->url_im(
                'pguestbook','/index.php'), null, 'im', 'pguestbook');
        // Получаем редактируемый объект из БД
        $object = $DOF->storage('posts')->get($id);
        // Создаем объект формы
        $customdata = new stdClass;
        $customdata->dof = $DOF;
        $customdata->task = $task;
		$customdata->id = $id;
		// Редактируем сообщение, поэтому postid = 0
		$customdata->postid = 0;
        $form = new dof_im_pguestbook_add_form($DOF->url_im(
            'pguestbook','/process_form.php',$addvars),$customdata);
        // Обработчик формы
        $form->process();
        // Заносим данные в форму
        $form->set_data($object);
        // Выводим форму на станицу
        $DOF->modlib('nvg')->print_header(NVG_MODE_PORTAL);
        $form->display();
        break;
    case 'editcomment' :
    // Редактирование комментария
        
        // Получаем id комментария
        $id = optional_param('id', 0, PARAM_INT);
        $addvars['id'] = $id;
        // Если id < 1 переводим на главную с ошибкой
        if ( $id < 1 )
            $DOF->print_error('error_edit_comment', $DOF->url_im(
                'pguestbook','/index.php'), null, 'im', 'pguestbook');
        // Если доступ запрещен, переводим на главную с ошибкой
        if (! $DOF->storage('comments')->is_access('edit',$id))
            $DOF->print_error('accesserror_edit_comment', $DOF->url_im(
                'pguestbook','/index.php'), null, 'im', 'pguestbook');
        // Получаем редактируемый объект из БД
        $object = $DOF->storage('comments')->get($id);
        // Создаем объект формы
        $customdata = new stdClass;
        $customdata->dof = $DOF;
        $customdata->task = $task;
		$customdata->id = $id;
		$customdata->postid = optional_param('postid', 0, PARAM_INT);
        $form = new dof_im_pguestbook_add_form($DOF->url_im(
            'pguestbook','/process_form.php',$addvars),$customdata);
        // Обработчик формы
        $form->process();
        // Заносим данные в форму
        $form->set_data($object);
        // Выводим форму на станицу
        $DOF->modlib('nvg')->print_header(NVG_MODE_PORTAL);
        $form->display();
        break;
    case 'deletepost' :
    // Удаление сообщения

        //Получаем id сообщения
        $id    = optional_param('id', 0, PARAM_INT);
        
        // Проверка доступа, иначе вывод ошибки
        if ($DOF->storage('posts')->is_access('delete',$id)) 
        { // Есть доступ. Пытаемся удалить по id
            if ( $DOF->storage('posts')->delete($id) ) 
                // Удаление прошло успешно. Пробуем удалить связанные комментарии
                if ( $DOF->storage('comments')->delete_by_post($id) )
                    // Комментарии удалены. Возврат на главную.
                    redirect($DOF->url_im('pguestbook','/index.php'));
            // Ошибка при удалении.
            $DOF->print_error('error_delete_post', $DOF->url_im(
                'pguestbook','/index.php'), null, 'im', 'pguestbook');
        }
        // Нет доступа к удалению. Выводим ошибку.
        $DOF->print_error('accesserror_delete_post', $DOF->url_im(
            'pguestbook','/index.php'), null, 'im', 'pguestbook');
        break;
    case 'deletecomment' :
    // Удаление комментария
        
        //Получаем id комментария
        $id    = optional_param('id', 0, PARAM_INT);
        
        // Проверка доступа, иначе вывод ошибки
        if ($DOF->storage('comments')->is_access('delete',$id)) 
        {// Есть доступ. Пытаемся удалить по id
            if ( $DOF->storage('comments')->delete($id) )
                // Комментарий удален. Возврат на главную.
                redirect($DOF->url_im('pguestbook','/index.php'));
            // Ошибка при удалении.
            $DOF->print_error('error_delete_comment', $DOF->url_im(
                'pguestbook','/index.php'), null, 'im', 'pguestbook');
        }
        // Нет доступа к удалению. Выводим ошибку.
        $DOF->print_error('accesserror_delete_comment', $DOF->url_im(
            'pguestbook','/index.php'), null, 'im', 'pguestbook');
        break;
    default :
    // Задача для обработки не передана - возврат на главную с ошибкой
        $DOF->print_error('error_no_task', $DOF->url_im(
            'pguestbook','/index.php'), null, 'im', 'pguestbook');
        break;
}
// Футер страницы
$DOF->modlib('nvg')->print_footer(NVG_MODE_PORTAL);